﻿/*!
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using System.Threading.Tasks;

namespace Pittypat
{
    /// <summary>
    /// 提供向用户发送通知的相关功能。
    /// </summary>
    /// <remarks>
    /// <see cref="INotificationService"/> 支持用户通过 "~/notification/count"、"~/notification/list"、"~/notification/read" 查询新通知数目、查询新通知列表以及将通知标记为已读。
    /// </remarks>
    public interface INotificationService
    {
        /// <summary>
        /// 异步加载指定用户的新通知的数目。
        /// </summary>
        /// <param name="userId">用户的 Id。</param>
        /// <param name="progress">跟踪和汇报异步操作的进度。</param>
        /// <returns>返回目标用户新通知的数目。</returns>
        Task<@int64> CountAsync(@uuid userId, IAsyncProgress progress);

        /// <summary>
        /// 异步加载指定用户的新通知的列表。
        /// </summary>
        /// <param name="userId">用户的 Id。</param>
        /// <param name="progress">跟踪和汇报异步操作的进度。</param>
        /// <returns>返回目标用户新通知的列表。</returns>
        Task<NotificationList> ListAsync(@uuid userId, IAsyncProgress progress);

        /// <summary>
        /// 异步将指定的通知记录标记为已读。
        /// </summary>
        /// <param name="userId">用户的 Id。</param>
        /// <param name="notificationId">要标记为已读的通知记录的 Id。</param>
        /// <param name="progress">跟踪和汇报异步操作的进度。</param>
        /// <returns>返回将消息标记为已读的时间。</returns>
        Task<@datetime?> ReadAsync(@uuid userId, @uuid notificationId, IAsyncProgress progress);
    }
}
